package commonUtility;

import java.io.*;

/**
 * @author erond
 */


/**
 * Classe contenente alcuni metodi utili per la gestione/manipolazione di file di testo
 */
public class LineUtility {

	//	 Metodo per restituire una linea specificata in una posizione di un certo file
	static String getLine(String nomeFile, int numLinea)
	{
		String linea = null;
		BufferedReader in = null;
		try { 
			in = new BufferedReader(new FileReader(nomeFile));
		}
		catch (FileNotFoundException e)
		{ 
			e.printStackTrace();
			return linea = "File non trovato";
		}
		try
		{ 
			for (int i=1; i<=numLinea; i++)
			{ 
				linea = in.readLine();
				if ( linea == null)
				{
					linea = "Linea non trovata";
					in.close();
					return linea;
				}
			}
		}
		catch (IOException e)
		{ 
			e.printStackTrace(); return linea = "Linea non trovata";
		}
		return linea;
	}

	public static int linesNumber(String nomeFile)
	{
		int count=0;
		String linea=null;
		boolean flag=true;
		BufferedReader in = null;
		try { in = new BufferedReader(new FileReader(nomeFile)); }
		catch (FileNotFoundException e)
		{ e.printStackTrace(); return -1; }
		try {
			while(flag) {
				linea=in.readLine();
				if ((linea!=null)&&(!linea.isEmpty())) {
					count++;
				} else flag=false;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return count; 
	}

	/* Metodo per recuperare la linea successiva di un file già aperto in
	   precedenza */
	public static String getNextLine(BufferedReader in)
	{ String linea = null;
	try
	{ if ((linea = in.readLine()) == null)
	{ in.close(); linea = "Nessuna linea disponibile";
	}
	}
	catch (FileNotFoundException e)
	{e.printStackTrace(); return linea = "File non trovato";}
	catch (IOException e)
	{e.printStackTrace(); linea = "Nessuna linea disponibile"; }
	return linea;
	}

	/**
	 * Metodo per inviare a byte un file
	 * @param src è un qualsiasi DataInputStream
	 * @param dest è un qualsiasi DataOutputStream
	 * @throws IOException
	 */
	static void trasferisci_a_byte_file(DataInputStream src,
			DataOutputStream dest) throws IOException {

		int buffer;
		boolean flag=true;
		try {

			while (flag) {
				buffer=src.read();
				dest.write(buffer);
				if(src.available()==0) flag=false;

			}

		}
		catch (EOFException e) {
			System.err.println("EOFException in trasf a byte ");
			dest.flush();
		}
	} // trasferisci_a_byte_file
}

